package xyz.ssf.cloud.project.system.service.impl;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import xyz.ssf.cloud.common.utils.JwtUtil;
import xyz.ssf.cloud.common.utils.RedisUtil;
import xyz.ssf.cloud.project.system.domain.SysUser;
import xyz.ssf.cloud.project.system.mapper.SysUserMapper;
import xyz.ssf.cloud.project.system.service.ISysUserService;

/**
 * 用户 业务层处理
 * 
 * @author ssf
 */
@Service
public class SysUserServiceImpl implements ISysUserService {
    
    @Autowired
    private SysUserMapper userMapper;
    
    @Autowired
    private JwtUtil jwtUtil;
    
    @Autowired
    private RedisUtil redisUtil;
    
    // 登录用户Redis前缀
    private static final String LOGIN_TOKEN_KEY = "login_tokens:";

    /**
     * 通过用户名查询用户
     * 
     * @param username 用户名
     * @return 用户对象信息
     */
    @Override
    public SysUser selectUserByUsername(String username) {
        return userMapper.selectUserByUsername(username);
    }

    /**
     * 通过用户ID查询用户
     * 
     * @param userId 用户ID
     * @return 用户对象信息
     */
    @Override
    public SysUser selectUserById(Long userId) {
        return userMapper.selectUserById(userId);
    }
    
    /**
     * 通过手机号查询用户
     * 
     * @param mobile 手机号
     * @return 用户对象信息
     */
    @Override
    public SysUser selectUserByMobile(String mobile) {
        return userMapper.selectUserByMobile(mobile);
    }
    
    /**
     * 通过token获取用户ID
     * 
     * @param token 令牌
     * @return 用户ID
     */
    @Override
    public String getUserIdByToken(String token) {
        if (StringUtils.isBlank(token)) {
            return null;
        }
        
        // 如果token以Bearer 开头，则去除前缀
        if (token.startsWith("Bearer ")) {
            token = token.substring(7);
        }
        
        // 验证token有效性
        if (!jwtUtil.validateToken(token)) {
            return null;
        }
        
        // 从token中解析用户ID
        Long userId = jwtUtil.getUserIdFromToken(token);
        return userId != null ? userId.toString() : null;
    }

    /**
     * 修改用户头像
     * 
     * @param username 用户名
     * @param avatar 头像地址
     * @return 结果
     */
    @Override
    public boolean updateUserAvatar(String username, String avatar) {
        return userMapper.updateUserAvatar(username, avatar) > 0;
    }

    /**
     * 记录用户登录信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    @Override
    public int updateLoginInfo(SysUser user) {
        return userMapper.updateLoginInfo(user);
    }

    /**
     * 获取用户角色
     * 
     * @param userId 用户ID
     * @return 角色数组
     */
    @Override
    public String[] getUserRoles(Long userId) {
        // 这里实现获取用户角色的逻辑
        // 在实际项目中，应该查询用户的角色表获取角色信息
        // 这里为了简化，返回默认角色
        return new String[]{"user"};
    }
    
    /**
     * 获取用户权限
     * 
     * @param userId 用户ID
     * @return 权限数组
     */
    @Override
    public String[] getUserPermissions(Long userId) {
        // 这里实现获取用户权限的逻辑
        // 在实际项目中，应该根据用户角色查询权限表获取权限信息
        // 这里为了简化，返回默认权限
        return new String[]{"file:list", "file:upload", "file:download"};
    }
} 